package ejbs;

import java.util.ArrayList;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.bea.xml.stream.samples.Parse;

import entities.Producto;

/**
 * Session Bean implementation class AdmArticulosBean
 */
@Stateless
public class AdmProductosBean implements AdmProductos {

	@PersistenceContext(unitName="TALLER")
	private EntityManager em;

	@EJB
	private AdmUrls admUrls;
	
	public Producto obtenerArticulo(String codigo) {
		Producto articulo = em.find(Producto.class, codigo);
		return articulo;
	}

	@SuppressWarnings("unchecked")
	@Override
	public ArrayList<Producto> obtenerArticulos() {
		
		// Cargar las urls
		admUrls.insertarUrls();
		
		Query query = em.createQuery("SELECT a FROM Producto a");
		return (ArrayList<Producto>) query.getResultList();
	}
	
	
	
	public ArrayList<Producto> obtenerArticulos(int numeroDePagina) {
		
		// Cargar las urls
		admUrls.insertarUrls();		
		int cantidadDeRegistrosPorPagina = 3;
		
		Query query = em.createQuery("SELECT a FROM Producto a");
		query.setFirstResult(cantidadDeRegistrosPorPagina * (numeroDePagina -1));
		query.setMaxResults(cantidadDeRegistrosPorPagina);
		
		return (ArrayList<Producto>) query.getResultList();
	}
	
	public int obtenerTotalDePaginas()
	{	
		int cantidadDeRegistrosPorPagina = 3;
		Query q = em.createQuery ("SELECT count(x) FROM Producto x");
		Number result = (Number) q.getSingleResult ();
		
		if(result.intValue()%cantidadDeRegistrosPorPagina >0)
		{
			return (result.intValue()/cantidadDeRegistrosPorPagina)+1;
		}
		
		return result.intValue()/cantidadDeRegistrosPorPagina;
		
		
	}

	@Override
	public Producto crearArticulo(String cod, String car, String marc,
			String orig, String descripcion) {
		Producto art = new Producto();
		art.setCodigo(cod);
		art.setCaracteristica(car);
		art.setMarca(marc);
		art.setDescripcion(descripcion);
		art.setOrigen(orig);
		em.persist(art);
		em.flush();
		return art;
	}

	@Override
	public Producto cargarArticulo(Producto art) {
		
		//SI EXISTE LO ACTUALIZA????????
		em.merge(art);
		em.flush();
		return art;
	}

	public void eliminarArticulo(String codigo) {
		Producto art = obtenerArticulo(codigo);
		if (art != null) {
			em.remove(art);
		}
	}
}
